<?php

/*
Ver Reporte de Reservas
Prerrequisitos: Sesión iniciada como Administrador.
Descripción: Cuando el usuario ingresa a la sección ver reporte de reservas, 
se despliega un menú en el que debe elegir si desea ver un reporte normal o un reporte de reservas canceladas. 
Después de que el usuario decide que desea consultar se pasa a una ventana en la se encuentran los controles de año, 
mes y ruta en la parte superior, y una tabla con el reporte de reservas en la parte inferior. 
El cliente puede configurar el reporte usando los controles, 
la tabla será actualizada a medida que el usuario vaya manipulando los controles disponibles. 

*/

App::uses('AppController', 'Controller');

class ReportesController extends AppController {

	/**
	 * 				CONTROLLER DATA MEMBERS
	 */
	  /**
	 * Componennte de sesion de cake
	 *
	 * En este archivo se usa la sesión para poder usar la función setFlash
	 *
	 * @var array(string)
	 */
	public $components = array('Session');
	/**
	 * Nombre del modelo
	 *
	 * Nombre del modelo para un alias las consultas y busquedas, ingresos y 
	 * otras interacciones con la base de datos. 
	 *
	 * @var string
	 */
	public $name = "Reportes";
	/**
	 * Modelos que utiliza
	 *
	 * Los modelos que usa el controller. Por defecto
	 * cake usa el singular basado en el nombre del modelo,
	 * pero por asuntos del idioma siempre se ingresa el modelo
	 * para evitar posibles problemas.
	 *
	 * @var array(string)
	 */

	public $uses = array('RecorridoRealizadoEvento','Sesion','Ruta','Reserva','Recorrido','RecorridoRealizado','RecorridoRealizadoUsuarioParada','Parada','Horario');
	public $helpers = array('Html','Form');

	/**
	 * 				CONTROLLER METHODS (ACTIONS)
	 */
	/**
	 * Action por defecto para los eventos
	 *
	 * Este es el metodo base de los eventos, en este metodo
	 * se buscan los eventos almacendos en el sistema y se 
	 * devuelven a la vista para que el usuario pueda realizar
	 * acciones sobre ellos
	 *
	 * @return void
	 */
	public function index(){
	}

	public function reporte_eventos(){
		if($this->request->is('post')){
			if(!empty($this->request->data['Reporte']['fecha_i'])||!empty($this->request->data['Reporte']['fecha_f'])){
				$rre= $this->RecorridoRealizadoEvento->find('all',
					array(
						'conditions'=>array(
							'and' => array(
								'RecorridoRealizado.fecha_salida >='=>$this->request->data['Reporte']['fecha_i'],
								'RecorridoRealizado.fecha_salida <='=>$this->request->data['Reporte']['fecha_f']
							)
							
						),
						'recursive' => 2
					)
				);

				$rreN=array_values($rre);
				if($rreN){
					$this->set('recorridos_realizados_eventos',$rreN);					
				}else{
					$this->Session->setFlash('No hay informacion de eventos entre las fechas seleccionadas');
				}

			}else{
				$this->Session->setFlash('Por favor ingrese la fecha inicial y final');
			}
		}
	}

	public function reporte_reservas_consolidado(){
		$this->set('rutas',$this->Ruta->find('all'));
		if($this->request->is('post')){
			if(!empty($this->request->data['Reporte']['fecha_i'])||!empty($this->request->data['Reporte']['fecha_f'])){

				$recorridos=$this->Recorrido->find('all',array(
					'conditions'=>array('Recorrido.id_ruta'=>$this->request->data['Reporte']['id_ruta'])
				));
				$reservas_realizadas=array();
				foreach ($recorridos as $key => $recorrido) {
					$recorridos_realizados=$this->RecorridoRealizado->find('all',array(
						'conditions'=>array(							
							'and' => array(
								'RecorridoRealizado.id_recorrido'=>$recorrido['Recorrido']['id_recorrido'],
								'RecorridoRealizado.fecha_salida >='=>$this->request->data['Reporte']['fecha_i'],
								'RecorridoRealizado.fecha_salida <='=>$this->request->data['Reporte']['fecha_f']
							)
						)
					));
					foreach ($recorridos_realizados as $key2 => $recorrido_realizado) {
						$reservas=$this->Reserva->find('all',array(
							'conditions'=>array('Reserva.id_recorrido_realizado'=>$recorrido_realizado['RecorridoRealizado']['id_recorrido_realizado']),
							'order'=>array('Reserva.fecha_creacion_reserva')
						));
						$reservas_realizadas= array_merge($reservas_realizadas,$reservas);
					}
				}

				foreach ($reservas_realizadas as $key => $reserva_realizada) {
						$anioRR=substr($reserva_realizada['Reserva']['fecha_creacion_reserva'],0,4);
						$mesRR=substr($reserva_realizada['Reserva']['fecha_creacion_reserva'],5,2);
						$diaRR=substr($reserva_realizada['Reserva']['fecha_creacion_reserva'],8,2);
						$tiempo = strtotime($mesRR.'/'.$diaRR.'/'.$anioRR);
						$arr_fecha = getdate($tiempo);
						$reservas_realizadas[$key]['reporte']['mes_res'] = $this->_decode_mes($mesRR);						
						$reservas_realizadas[$key]['reporte']['dia_semana_res'] = $this->_get_dia_semana($arr_fecha['wday']);
						$reservas_realizadas[$key]['reporte']['num_semana_res'] = (int)date('W', $tiempo);
						$date =  new DateTime($reserva_realizada['Reserva']['fecha_creacion_reserva']);
						$ret = clone $date;
						$ret->modify(-(($date->format('w')-1) % 7) . 'days');
						$reservas_realizadas[$key]['reporte']['semana_res'] = $ret->format('m/d/Y');
						$ret->add(new DateInterval('P6D'));
						$reservas_realizadas[$key]['reporte']['semana_res']=$reservas_realizadas[$key]['reporte']['semana_res'].' - '.$ret->format('m/d/Y');
				}
				$this->set('num_reservas',sizeof($reservas_realizadas));				
				if(sizeof($reservas_realizadas)>0){
					foreach ($reservas_realizadas as $key => $reserva) {
						$recorrido_realizado=$this->RecorridoRealizado->find('first',array('conditions'=>array('RecorridoRealizado.id_recorrido_realizado'=>$reserva['Reserva']['id_recorrido_realizado'])));
						$recorrido=$this->Recorrido->find('first',array('conditions'=>array('Recorrido.id_recorrido'=>$recorrido_realizado['RecorridoRealizado']['id_recorrido'])));
						$parada=$this->Parada->find('first',array('conditions'=>array('Parada.id_parada'=>$reserva['Reserva']['id_parada'])));

						array_push ($reservas_realizadas[$key]['Reserva'],array(
							'nombre_ruta'=>$recorrido['Ruta']['nombre_ruta'],
							'nombre_horario'=>$recorrido['Horario']['nombre_horario'],
							'nombre_parada'=>$parada['Parada']['nombre_parada']
							));
					}
					if($this->request->data['Reporte']['ver']=='1'){
						$this->set('ver','Mes');
						$res_lista = [];
						$estados_mes = [];
						$contador_res = 0;		
						foreach ($reservas_realizadas as $key => $res) {
								if(empty($res_lista[$reservas_realizadas[$key]['reporte']['mes_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']])){
									$res_lista[$reservas_realizadas[$key]['reporte']['mes_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]=1;
								}else{
									$res_lista[$reservas_realizadas[$key]['reporte']['mes_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]=$res_lista[$reservas_realizadas[$key]['reporte']['mes_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]+1;
								}
								if(empty($estados_mes[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['mes_res']])){
									$estados_mes[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['mes_res']] = 1;
								}else{
									$estados_mes[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['mes_res']]++;
								}
								$contador_res++;		
						}
						$this->set('reservas_listas',$res_lista);						
						$porcentaje_res_listas = [];
						foreach ($res_lista as $mes => $estnumres) {
							foreach($estnumres as $estado => $numres){
								$porcentaje_res_listas[$mes][$estado] = ($numres/$contador_res)*100;								
							}
						}
						$this->set('porcentaje_res_listas',$porcentaje_res_listas);
						$eje_x = "[";				
						$counter = 0;
						$vector_eje_x = [];
						foreach ($res_lista as $mes => $res) {
								if($counter == 0){
									$eje_x = $eje_x .'"'.$mes.'"';									
								}else{
									$eje_x = $eje_x .','.'"'.$mes.'"';									
								}
								$vector_eje_x[] = $mes;
								$counter++;
						}
						$eje_x = $eje_x . ']';						
						$this->set('eje_x',$eje_x);
						$eje_y = "[";
						$counterR = 0;
						foreach($estados_mes as $estado => $mes_res){
							if($counterR == 0){
								$eje_y = $eje_y . "{ name:'".$estado."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $mesv){
									if($counterM==0){
										if(empty($mes_res[$mesv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $mes_res[$mesv];
										}
									}else{
										if(empty($mes_res[$mesv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $mes_res[$mesv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}else{
								$eje_y = $eje_y . ",{ name:'".$estado."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $mesv){
									if($counterM==0){
										if(empty($mes_res[$mesv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $mes_res[$mesv];
										}
									}else{
										if(empty($mes_res[$mesv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $mes_res[$mesv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}
							$counterR++;
						}
						$eje_y = $eje_y . "]";
						$this->set('eje_y',$eje_y);

					}else if($this->request->data['Reporte']['ver']=='2'){
						$this->set('ver','Semana');
						$res_lista = [];
						$estados_mes = [];
						$contador_res = 0;		
						foreach ($reservas_realizadas as $key => $res) {
								if(empty($res_lista[$reservas_realizadas[$key]['reporte']['semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']])){
									$res_lista[$reservas_realizadas[$key]['reporte']['semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]=1;
								}else{
									$res_lista[$reservas_realizadas[$key]['reporte']['semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]=$res_lista[$reservas_realizadas[$key]['reporte']['semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]+1;
								}
								if(empty($estados_semana[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['semana_res']])){
									$estados_semana[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['semana_res']] = 1;
								}else{
									$estados_semana[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['semana_res']]++;
								}
								$contador_res++;		
						}
						$this->set('reservas_listas',$res_lista);						
						$porcentaje_res_listas = [];
						foreach ($res_lista as $semana => $estnumres) {
							foreach($estnumres as $estado => $numres){
								$porcentaje_res_listas[$semana][$estado] = ($numres/$contador_res)*100;								
							}
						}
						$this->set('porcentaje_res_listas',$porcentaje_res_listas);
						$eje_x = "[";				
						$counter = 0;
						$vector_eje_x = [];
						foreach ($res_lista as $semana => $res) {
								if($counter == 0){
									$eje_x = $eje_x .'"'.$semana.'"';									
								}else{
									$eje_x = $eje_x .','.'"'.$semana.'"';									
								}
								$vector_eje_x[] = $semana;
								$counter++;
						}
						$eje_x = $eje_x . ']';						
						$this->set('eje_x',$eje_x);
						$eje_y = "[";
						$counterR = 0;
						foreach($estados_semana as $estado => $semana_res){
							if($counterR == 0){
								$eje_y = $eje_y . "{ name:'".$estado."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $semanav){
									if($counterM==0){
										if(empty($semana_res[$semanav])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $semana_res[$semanav];
										}
									}else{
										if(empty($semana_res[$semanav])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $semana_res[$semanav];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}else{
								$eje_y = $eje_y . ",{ name:'".$estado."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $semanav){
									if($counterM==0){
										if(empty($semana_res[$semanav])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $semana_res[$semanav];
										}
									}else{
										if(empty($semana_res[$semanav])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $semana_res[$semanav];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}
							$counterR++;
						}
						$eje_y = $eje_y . "]";
						$this->set('eje_y',$eje_y);
						
					}else{
						$this->set('ver','Dia Semana');						
						$res_lista = array('Lunes'=>[],'Martes'=>[],'Miércoles'=>[],'Jueves'=>[],'Viernes'=>[],'Sábado'=>[],'Domingo'=>[]);						
						$estados_dia_semana = [];
						$contador_res = 0;		
						foreach ($reservas_realizadas as $key => $res) {
								if(empty($res_lista[$reservas_realizadas[$key]['reporte']['dia_semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']])){
									$res_lista[$reservas_realizadas[$key]['reporte']['dia_semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]=1;
								}else{
									$res_lista[$reservas_realizadas[$key]['reporte']['dia_semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]=$res_lista[$reservas_realizadas[$key]['reporte']['dia_semana_res']][$reservas_realizadas[$key]['Reserva']['estado_reserva']]+1;
								}
								if(empty($estados_dia_semana[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['dia_semana_res']])){
									$estados_dia_semana[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['dia_semana_res']] = 1;
								}else{
									$estados_dia_semana[$reservas_realizadas[$key]['Reserva']['estado_reserva']][$reservas_realizadas[$key]['reporte']['dia_semana_res']]++;
								}
								$contador_res++;		
						}
						$this->set('reservas_listas',$res_lista);						
						$porcentaje_res_listas = [];
						foreach ($res_lista as $dia_semana => $estnumres) {
							foreach($estnumres as $estado => $numres){
								$porcentaje_res_listas[$dia_semana][$estado] = ($numres/$contador_res)*100;								
							}
						}
						$this->set('porcentaje_res_listas',$porcentaje_res_listas);
						$eje_x = "[";				
						$counter = 0;
						$vector_eje_x = [];
						foreach ($res_lista as $dia_semana => $res) {
								if($counter == 0){
									$eje_x = $eje_x .'"'.$dia_semana.'"';									
								}else{
									$eje_x = $eje_x .','.'"'.$dia_semana.'"';									
								}
								$vector_eje_x[] = $dia_semana;
								$counter++;
						}
						$eje_x = $eje_x . ']';						
						$this->set('eje_x',$eje_x);
						$eje_y = "[";
						$counterR = 0;
						foreach($estados_dia_semana as $estado => $dia_semana_res){
							if($counterR == 0){
								$eje_y = $eje_y . "{ name:'".$estado."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $dia_semanav){
									if($counterM==0){
										if(empty($dia_semana_res[$dia_semanav])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $dia_semana_res[$dia_semanav];
										}
									}else{
										if(empty($dia_semana_res[$dia_semanav])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $dia_semana_res[$dia_semanav];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}else{
								$eje_y = $eje_y . ",{ name:'".$estado."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $dia_semanav){
									if($counterM==0){
										if(empty($dia_semana_res[$dia_semanav])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $dia_semana_res[$dia_semanav];
										}
									}else{
										if(empty($dia_semana_res[$dia_semanav])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $dia_semana_res[$dia_semanav];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}
							$counterR++;
						}
						$eje_y = $eje_y . "]";
						$this->set('eje_y',$eje_y);
						
					}
					$this->set('reservas',$reservas_realizadas);
					
				}else{
					$this->Session->setFlash('No hay informacion de reservas entre las fechas seleccionadas');
				}
				
			}else{
				$this->Session->setFlash('Por favor ingrese la fecha inicial y final');
			}
		}
	}
	
	public function reporte_reservas(){
		$this->set('rutas',$this->Ruta->find('all'));
		if($this->request->is('post')){
			if(!empty($this->request->data['Reporte']['fecha_i'])||!empty($this->request->data['Reporte']['fecha_f'])){

				$recorridos=$this->Recorrido->find('all',array('conditions'=>array('Recorrido.id_ruta'=>$this->request->data['Reporte']['id_ruta'])));
				$reservas_realizadas=array();
				foreach ($recorridos as $key => $recorrido) {
					$recorridos_realizados=$this->RecorridoRealizado->find('all',array(
						'conditions'=>array(							
							'and' => array(
								'RecorridoRealizado.id_recorrido'=>$recorrido['Recorrido']['id_recorrido'],
								'RecorridoRealizado.fecha_salida >='=>$this->request->data['Reporte']['fecha_i'],
								'RecorridoRealizado.fecha_salida <='=>$this->request->data['Reporte']['fecha_f']
							)
						)
					));
					foreach ($recorridos_realizados as $key2 => $recorrido_realizado) {
						$reservas=$this->Reserva->find('all',array('conditions'=>array('Reserva.id_recorrido_realizado'=>$recorrido_realizado['RecorridoRealizado']['id_recorrido_realizado'])));
						$reservas_realizadas= array_merge($reservas_realizadas,$reservas);
					}
				}

				$rreN=array_values($reservas_realizadas);
				if($rreN){
					foreach ($rreN as $key => $reserva) {
						$recorrido_realizado=$this->RecorridoRealizado->find('first',array('conditions'=>array('RecorridoRealizado.id_recorrido_realizado'=>$reserva['Reserva']['id_recorrido_realizado'])));
						$recorrido=$this->Recorrido->find('first',array('conditions'=>array('Recorrido.id_recorrido'=>$recorrido_realizado['RecorridoRealizado']['id_recorrido'])));
						$parada=$this->Parada->find('first',array('conditions'=>array('Parada.id_parada'=>$reserva['Reserva']['id_parada'])));

						array_push ($rreN[$key]['Reserva'],array(
							'nombre_ruta'=>$recorrido['Ruta']['nombre_ruta'],
							'nombre_horario'=>$recorrido['Horario']['nombre_horario'],
							'nombre_parada'=>$parada['Parada']['nombre_parada']
							));
					}
					$this->set('reservas',$rreN);
					
				}else{
					$this->Session->setFlash('No hay informacion de reservas entre las fechas seleccionadas');
				}
				
			}else{
				$this->Session->setFlash('Por favor ingrese la fecha inicial y final');
			}
		}
	}

	public function reporte_afluencia_consolidado(){
		if($this->request->is('post')){
			if(!empty($this->request->data['Reporte']['fecha_i'])||!empty($this->request->data['Reporte']['fecha_f'])){
				$rrup= $this->RecorridoRealizadoUsuarioParada->find('all',array(
					'order' => array('RecorridoRealizado.fecha_salida'),
					'conditions'=>array(
							'and' => array(
								'RecorridoRealizado.fecha_salida >='=>$this->request->data['Reporte']['fecha_i'],
								'RecorridoRealizado.fecha_salida <='=>$this->request->data['Reporte']['fecha_f']
							)
							
						)
				));
				$this->set('bla',$rrup);	
				foreach ($rrup as $key => $user) {					
					$anioRR=substr($user['RecorridoRealizado']['fecha_salida'],0,4);
					$mesRR=substr($user['RecorridoRealizado']['fecha_salida'],5,2);
					$diaRR=substr($user['RecorridoRealizado']['fecha_salida'],8,2);
					$tiempo = strtotime($mesRR.'/'.$diaRR.'/'.$anioRR);
					$arr_fecha = getdate($tiempo);
					$rrup[$key]['reporte']['mes_afl'] = $this->_decode_mes($mesRR);						
					$rrup[$key]['reporte']['dia_semana_afl'] = $this->_get_dia_semana($arr_fecha['wday']);
					$rrup[$key]['reporte']['num_semana_afl'] = (int)date('W', $tiempo);
					$date =  new DateTime($user['RecorridoRealizado']['fecha_salida']);
					$ret = clone $date;
					$ret->modify(-(($date->format('w')-1) % 7) . 'days');
					$rrup[$key]['reporte']['semana_afl'] = $ret->format('m/d/Y');
					$ret->add(new DateInterval('P6D'));
					$rrup[$key]['reporte']['semana_afl']=$rrup[$key]['reporte']['semana_afl'].' - '.$ret->format('m/d/Y');
				}
				
				if(sizeof($rrup)>0){
					foreach ($rrup as $key => $user) {						
						$parada=$this->Parada->find('first',array('conditions'=>array('Parada.id_parada'=>$user['RecorridoRealizadoParada']['id_parada'])));
						$recorrido=$this->Recorrido->find('first',array('conditions'=>array('Recorrido.id_recorrido'=>$user['RecorridoRealizado']['id_recorrido'])));
						
						array_push ($rrup[$key]['RecorridoRealizadoUsuarioParada'],array(
							'nombre_parada'=>$parada['Parada']['nombre_parada'],
							'nombre_ruta'=>$recorrido['Ruta']['nombre_ruta'],
							'nombre_horario'=>$recorrido['Horario']['nombre_horario'],
							'fecha'=>$user['RecorridoRealizado']['fecha_salida']
							));
					}
					$this->set('num_usuarios',sizeof($rrup));
					if($this->request->data['Reporte']['ver']=='1'){
						$this->set('ver','Mes');
						$afl_lista = [];
						$rutas_mes = [];
						$contador_afl = 0;
						foreach ($rrup as $key => $afl) {
								if(empty($afl_lista[$rrup[$key]['reporte']['mes_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']])){
									$afl_lista[$rrup[$key]['reporte']['mes_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]=1;
								}else{
									$afl_lista[$rrup[$key]['reporte']['mes_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]=$afl_lista[$rrup[$key]['reporte']['mes_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]+1;
								}
								if(empty($rutas_mes[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['mes_afl']])){
									$rutas_mes[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['mes_afl']] = 1;
								}else{
									$rutas_mes[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['mes_afl']]++;
								}
								$contador_afl++;
						}
						$this->set('afluencias_listas',$afl_lista);
						$this->set('rutas_mes',$rutas_mes);
						$porcentaje_afl_listas = [];
						foreach ($afl_lista as $key => $afl) {
							foreach($afl as $key2 => $aflhorario){
								foreach($aflhorario as $key3 => $aflhorariorutas){
									foreach($aflhorariorutas as $key4 => $num_us){
										$porcentaje_afl_listas[$key][$key2][$key3][$key4] = ($num_us/$contador_afl)*100;
									}
									
								}
								
							}
						}
						$this->set('porcentaje_afl_listas',$porcentaje_afl_listas);
						$eje_x = "[";				
						$counter = 0;
						$vector_eje_x = [];
						foreach ($afl_lista as $mes => $afl) {
								if($counter == 0){
									$eje_x = $eje_x .'"'.$mes.'"';									
								}else{
									$eje_x = $eje_x .','.'"'.$mes.'"';									
								}
								$vector_eje_x[] = $mes;
								$counter++;
						}
						$eje_x = $eje_x . ']';						
						$this->set('eje_x',$eje_x);
						$eje_y = "[";
						$counterR = 0;
						foreach($rutas_mes as $ruta => $mes_afl){
							if($counterR == 0){
								$eje_y = $eje_y . "{ name:'".$ruta."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $mesv){
									if($counterM==0){
										if(empty($mes_afl[$mesv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $mes_afl[$mesv];
										}
									}else{
										if(empty($mes_afl[$mesv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $mes_afl[$mesv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}else{
								$eje_y = $eje_y . ",{ name:'".$ruta."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $mesv){
									if($counterM==0){
										if(empty($mes_afl[$mesv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $mes_afl[$mesv];
										}
									}else{
										if(empty($mes_afl[$mesv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $mes_afl[$mesv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}
							$counterR++;
						}
						$eje_y = $eje_y . "]";
						$this->set('eje_y',$eje_y);

					}else if($this->request->data['Reporte']['ver']=='2'){
						$this->set('ver','Semana');
						$afl_lista = [];
						$rutas_semana = [];
						$contador_afl = 0;
						foreach ($rrup as $key => $afl) {
								if(empty($afl_lista[$rrup[$key]['reporte']['semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']])){
									$afl_lista[$rrup[$key]['reporte']['semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]=1;
								}else{
									$afl_lista[$rrup[$key]['reporte']['semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]=$afl_lista[$rrup[$key]['reporte']['semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]+1;
								}
								if(empty($rutas_semana[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['semana_afl']])){
									$rutas_semana[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['semana_afl']] = 1;
								}else{
									$rutas_semana[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['semana_afl']]++;
								}
								$contador_afl++;
						}
						$this->set('afluencias_listas',$afl_lista);
						$this->set('rutas_semana',$rutas_semana);
						$porcentaje_afl_listas = [];
						foreach ($afl_lista as $key => $afl) {
							foreach($afl as $key2 => $aflhorario){
								foreach($aflhorario as $key3 => $aflhorariorutas){
									foreach($aflhorariorutas as $key4 => $num_us){
										$porcentaje_afl_listas[$key][$key2][$key3][$key4] = ($num_us/$contador_afl)*100;
									}
									
								}
								
							}
						}
						$this->set('porcentaje_afl_listas',$porcentaje_afl_listas);
						$eje_x = "[";				
						$counter = 0;
						$vector_eje_x = [];
						foreach ($afl_lista as $semana => $afl) {
								if($counter == 0){
									$eje_x = $eje_x .'"'.$semana.'"';									
								}else{
									$eje_x = $eje_x .','.'"'.$semana.'"';									
								}
								$vector_eje_x[] = $semana;
								$counter++;
						}
						$eje_x = $eje_x . ']';						
						$this->set('eje_x',$eje_x);
						$eje_y = "[";
						$counterR = 0;
						foreach($rutas_semana as $ruta => $semana_afl){
							if($counterR == 0){
								$eje_y = $eje_y . "{ name:'".$ruta."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $semv){
									if($counterM==0){
										if(empty($semana_afl[$semv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $semana_afl[$semv];
										}
									}else{
										if(empty($semana_afl[$semv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $semana_afl[$semv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}else{
								$eje_y = $eje_y . ",{ name:'".$ruta."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $semv){
									if($counterM==0){
										if(empty($semana_afl[$semv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $semana_afl[$semv];
										}
									}else{
										if(empty($semana_afl[$semv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $semana_afl[$semv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}
							$counterR++;
						}
						$eje_y = $eje_y . "]";
						$this->set('eje_y',$eje_y);
						
					}else{
						$this->set('ver','Dia Semana');
						$afl_lista = array('Lunes'=>[],'Martes'=>[],'Miércoles'=>[],'Jueves'=>[],'Viernes'=>[],'Sábado'=>[],'Domingo'=>[]);						
						$rutas_dia_semana = [];
						$contador_afl = 0;
						foreach ($rrup as $key => $afl) {
								if(empty($afl_lista[$rrup[$key]['reporte']['dia_semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']])){
									$afl_lista[$rrup[$key]['reporte']['dia_semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]=1;
								}else{
									$afl_lista[$rrup[$key]['reporte']['dia_semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]=$afl_lista[$rrup[$key]['reporte']['dia_semana_afl']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_parada']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_horario']][$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']]+1;
								}
								if(empty($rutas_dia_semana[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['dia_semana_afl']])){
									$rutas_dia_semana[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['dia_semana_afl']] = 1;
								}else{
									$rutas_dia_semana[$rrup[$key]['RecorridoRealizadoUsuarioParada'][0]['nombre_ruta']][$rrup[$key]['reporte']['dia_semana_afl']]++;
								}
								$contador_afl++;
						}
						$this->set('afluencias_listas',$afl_lista);
						$this->set('rutas_dia_semana',$rutas_dia_semana);
						$porcentaje_afl_listas = [];
						foreach ($afl_lista as $key => $afl) {
							foreach($afl as $key2 => $aflhorario){
								foreach($aflhorario as $key3 => $aflhorariorutas){
									foreach($aflhorariorutas as $key4 => $num_us){
										$porcentaje_afl_listas[$key][$key2][$key3][$key4] = ($num_us/$contador_afl)*100;
									}
									
								}
								
							}
						}
						$this->set('porcentaje_afl_listas',$porcentaje_afl_listas);
						$eje_x = "[";				
						$counter = 0;
						$vector_eje_x = [];
						foreach ($afl_lista as $dia_semana => $afl) {
								if($counter == 0){
									$eje_x = $eje_x .'"'.$dia_semana.'"';									
								}else{
									$eje_x = $eje_x .','.'"'.$dia_semana.'"';									
								}
								$vector_eje_x[] = $dia_semana;
								$counter++;
						}
						$eje_x = $eje_x . ']';						
						$this->set('eje_x',$eje_x);
						$eje_y = "[";
						$counterR = 0;
						foreach($rutas_dia_semana as $ruta => $dia_semana_afl){
							if($counterR == 0){
								$eje_y = $eje_y . "{ name:'".$ruta."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $semv){
									if($counterM==0){
										if(empty($dia_semana_afl[$semv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $dia_semana_afl[$semv];
										}
									}else{
										if(empty($dia_semana_afl[$semv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $dia_semana_afl[$semv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}else{
								$eje_y = $eje_y . ",{ name:'".$ruta."',data:[";
								$counterM = 0;
								foreach($vector_eje_x as $key => $semv){
									if($counterM==0){
										if(empty($dia_semana_afl[$semv])){
											$eje_y = $eje_y . "0";
										}else{
											$eje_y = $eje_y . $dia_semana_afl[$semv];
										}
									}else{
										if(empty($dia_semana_afl[$semv])){
											$eje_y = $eje_y . ",0";
										}else{
											$eje_y = $eje_y .",". $dia_semana_afl[$semv];
										}
									}								
									$counterM++;								
								}
								$eje_y = $eje_y . "]}";
							}
							$counterR++;
						}
						$eje_y = $eje_y . "]";
						$this->set('eje_y',$eje_y);
						
					}					
				}else{
					$this->Session->setFlash('No hay informacion de personas entre las fechas seleccionadas');
				}
			}else{
				$this->Session->setFlash('Por favor ingrese la fecha inicial y final');
			}
		}
	}
	
	public function reporte_afluencia(){
		if($this->request->is('post')){
			if(!empty($this->request->data['Reporte']['fecha_i'])||!empty($this->request->data['Reporte']['fecha_f'])){
				$rrup= $this->RecorridoRealizadoUsuarioParada->find('all',
					array(
						'conditions'=>array(
							'and' => array(
								'RecorridoRealizado.fecha_salida >='=>$this->request->data['Reporte']['fecha_i'],
								'RecorridoRealizado.fecha_salida <='=>$this->request->data['Reporte']['fecha_f']
							)
							
						)						
					)
				);
				
				$rrupN=array_values($rrup);
				if($rrupN){
					foreach ($rrupN as $key => $user) {
						$parada=$this->Parada->find('first',array('conditions'=>array('Parada.id_parada'=>$user['RecorridoRealizadoParada']['id_parada'])));
						$recorrido=$this->Recorrido->find('first',array('conditions'=>array('Recorrido.id_recorrido'=>$user['RecorridoRealizado']['id_recorrido'])));
						
						array_push ($rrupN[$key]['RecorridoRealizadoUsuarioParada'],array(
							'nombre_parada'=>$parada['Parada']['nombre_parada'],
							'nombre_ruta'=>$recorrido['Ruta']['nombre_ruta'],
							'nombre_horario'=>$recorrido['Horario']['nombre_horario'],
							'fecha'=>$user['RecorridoRealizado']['fecha_salida']
							));
					}	
					$this->set('rrup',$rrupN);
				}else{
					$this->Session->setFlash('No hay informacion de personas entre las fechas seleccionados');
				}
			}else{
				$this->Session->setFlash('Por favor ingrese la fecha inicial y final');
			}			
		}
	}

	public function reporte_sesiones(){
		if($this->request->is('post')){
			if(!empty($this->request->data['Reporte']['fecha_i'])||!empty($this->request->data['Reporte']['fecha_f'])){
				$sesiones= $this->Sesion->find('all',
					array(
						'conditions'=>array(
							'and' => array(
								'Sesion.fecha_inicio_sesion >='=>$this->request->data['Reporte']['fecha_i'],
								'Sesion.fecha_inicio_sesion <='=>$this->request->data['Reporte']['fecha_f']
							)
							
						)						
					)
				);

				$sesionesN=array_values($sesiones);
				if($sesionesN){
					$this->set('sesiones',$sesionesN);
				}else{
					$this->Session->setFlash('No hay informacion de sesiones entre las fechas seleccionadas');
				}

			}else{
				$this->Session->setFlash('Por favor ingrese la fecha inicial y final');
			}
		}
	}
	
	public function reporte_sesiones_consolidado(){
		if($this->request->is('post')){
			if(!empty($this->request->data['Reporte']['fecha_i'])||!empty($this->request->data['Reporte']['fecha_f'])){
				$sesiones= $this->Sesion->find('all',array(
					'order' => array('Sesion.fecha_inicio_sesion'),
					'conditions'=>array(
						'and' => array(
							'Sesion.fecha_inicio_sesion >='=>$this->request->data['Reporte']['fecha_i'],
							'Sesion.fecha_inicio_sesion <='=>$this->request->data['Reporte']['fecha_f']
						)
						
					)	
				));
				$porcentaje_sesiones_listas=[];
				foreach ($sesiones as $key => $sesion) {
					$anioRR=substr($sesion['Sesion']['fecha_inicio_sesion'],0,4);
					$mesRR=substr($sesion['Sesion']['fecha_inicio_sesion'],5,2);
					$diaRR=substr($sesion['Sesion']['fecha_inicio_sesion'],8,2);
					$tiempo = strtotime($mesRR.'/'.$diaRR.'/'.$anioRR);
					$arr_fecha = getdate($tiempo);
					$sesiones[$key]['Sesion']['mes_sesion'] = $this->_decode_mes($mesRR);
					$sesiones[$key]['Sesion']['dia_semana_sesion'] = $this->_get_dia_semana($arr_fecha['wday']);
					$sesiones[$key]['Sesion']['num_semana_sesion'] = (int)date('W', $tiempo);
					$date =  new DateTime($sesion['Sesion']['fecha_inicio_sesion']);
					$ret = clone $date;
					$ret->modify(-(($date->format('w')-1) % 7) . 'days');
					$sesiones[$key]['Sesion']['semana_sesion'] = $ret->format('m/d/Y');
					$ret->add(new DateInterval('P6D'));
					$sesiones[$key]['Sesion']['semana_sesion']=$sesiones[$key]['Sesion']['semana_sesion'].' - '.$ret->format('m/d/Y');				
				}
				
				if($this->request->data['Reporte']['ver']=='1'){
					$this->set('ver','Mes');
					$ses_listas = [];
					foreach ($sesiones as $key => $sesion) {
							if(empty($ses_listas[$sesiones[$key]['Sesion']['mes_sesion']])){
								$ses_listas[$sesiones[$key]['Sesion']['mes_sesion']]=1;
							}else{
								$ses_listas[$sesiones[$key]['Sesion']['mes_sesion']]=$ses_listas[$sesiones[$key]['Sesion']['mes_sesion']]+1;
							}
					}
					$this->set('sesiones_listas',$ses_listas);
					$porcentaje_sesiones_listas = [];
					foreach ($ses_listas as $key => $sl) {
						$porcentaje_sesiones_listas[$key]=	$sl/sizeof($sesiones)*100;
					}
					$this->set('porcentaje_sesiones_listas',$porcentaje_sesiones_listas);
					$datos_grafica_barras = "";				
					$counter = 0;
					foreach ($porcentaje_sesiones_listas as $key => $psl) {
							if($counter == 0){
								$datos_grafica_barras = $datos_grafica_barras . '["'.$key.'",'.$psl.']';
							}else{
								$datos_grafica_barras = $datos_grafica_barras . ',["'.$key.'",'.$psl.']';
							}
							$counter++;
					}
					$this->set('datos_grafica_barras',$datos_grafica_barras);
				}else if($this->request->data['Reporte']['ver']=='2'){
					$this->set('ver','Semana');
					$ses_listas = [];
					foreach ($sesiones as $key => $sesion) {
							if(empty($ses_listas[$sesiones[$key]['Sesion']['semana_sesion']])){
								$ses_listas[$sesiones[$key]['Sesion']['semana_sesion']]=1;
							}else{
								$ses_listas[$sesiones[$key]['Sesion']['semana_sesion']]=$ses_listas[$sesiones[$key]['Sesion']['semana_sesion']]+1;
							}
					}
					$this->set('sesiones_listas',$ses_listas);
					$porcentaje_sesiones_listas = [];
					foreach ($ses_listas as $key => $sl) {
						$porcentaje_sesiones_listas[$key]=	$sl/sizeof($sesiones)*100;
					}
					$this->set('porcentaje_sesiones_listas',$porcentaje_sesiones_listas);
					$eje_x = "[";
					$eje_y = "[";					
					$counter = 0;
					foreach ($ses_listas as $key => $psl) {
							if($counter == 0){
								$eje_x = $eje_x .'"'.$key.'"';
								$eje_y = $eje_y . $psl;
							}else{
								$eje_x = $eje_x .','.'"'.$key.'"';
								$eje_y = $eje_y .','. $psl;
							}
							$counter++;
					}
					$eje_x = $eje_x . ']';
					$eje_y = $eje_y . ']';
					$this->set('eje_x',$eje_x);
					$this->set('eje_y',$eje_y);
				}else{
					$this->set('ver','Dia Semana');
					$ses_listas = array('Lunes'=>0,'Martes'=>0,'Miércoles'=>0,'Jueves'=>0,'Viernes'=>0,'Sábado'=>0,'Domingo'=>0);
					foreach ($sesiones as $key => $sesion) {
							if(empty($ses_listas[$sesiones[$key]['Sesion']['dia_semana_sesion']])){
								$ses_listas[$sesiones[$key]['Sesion']['dia_semana_sesion']]=1;
							}else{
								$ses_listas[$sesiones[$key]['Sesion']['dia_semana_sesion']]=$ses_listas[$sesiones[$key]['Sesion']['dia_semana_sesion']]+1;
							}
					}
					$this->set('sesiones_listas',$ses_listas);
					$porcentaje_sesiones_listas = array('Lunes'=>0,'Martes'=>0,'Miércoles'=>0,'Jueves'=>0,'Viernes'=>0,'Sábado'=>0,'Domingo'=>0);
					foreach ($ses_listas as $key => $sl) {
						$porcentaje_sesiones_listas[$key]=	$sl/sizeof($sesiones)*100;
					}
					$this->set('porcentaje_sesiones_listas',$porcentaje_sesiones_listas);
					$datos_grafica_barras = "";				
					$counter = 0;
					foreach ($porcentaje_sesiones_listas as $key => $psl) {
							if($psl>0){
								if($counter == 0){
									$datos_grafica_barras = $datos_grafica_barras . '["'.$key.'",'.$psl.']';
								}else{
									$datos_grafica_barras = $datos_grafica_barras . ',["'.$key.'",'.$psl.']';
								}
								$counter++;
							}
					}
					
					$this->set('datos_grafica_barras',$datos_grafica_barras);
				}

				$sesionesN=array_values($sesiones);
				if(sizeof($ses_listas)>0){
					$this->set('num_sesiones',sizeof($sesiones));
				}else{
					$this->Session->setFlash('No hay informacion de sesiones entre las fechas seleccionadas');
				}				
			}else{
				$this->Session->setFlash('Por favor ingrese la fecha inicial y final');
			}
		}
	}
	
	protected function _decode_mes($mes){
		switch($mes){
			case '01':
				return 'Enero';
				break;
			case '02':
				return 'Febrero';
				break;
			case '03':
				return 'Marzo';
				break;
			case '04':
				return 'Abril';
				break;
			case '05':
				return 'Mayo';
				break;
			case '06':
				return 'Junio';
				break;
			case '07':
				return 'Julio';
				break;
			case '08':
				return 'Agosto';
				break;
			case '09':
				return 'Septiembre';
				break;
			case '10':
				return 'Octubre';
				break;
			case '11':
				return 'Noviembre';
				break;
			case '12':
				return 'Diciembre';
				break;
		}
	}
	
	function _get_dia_semana($numdia){
		switch($numdia){
			case 1:
				return 'Lunes';
			case 2:
				return 'Martes';
			case 3:
				return 'Miércoles';
			case 4:
				return 'Jueves';
			case 5:
				return 'Viernes';
			case 6:
				return 'Sábado';
			case 0:
				return 'Domingo';
		}
	}


}